package com.jsbs.iam.user.mapper;

import com.jsbs.iam.user.entity.IamAdminRoleInfo;
import com.jsbs.iam.user.param.AdminRoleParam;
import com.jsbs.iam.user.vo.AdminRoleInfoVo;
import com.jsbs.iam.user.vo.AdminRoleStatusVo;
import com.jsbs.iam.user.vo.UserAccountVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
public interface IamAdminRoleMapper {

    /**
     * 功能描述：分页查询管理员角色列表
     * @param adminRoleParam
     * @return
     */
    List<AdminRoleInfoVo> queryList(@Param("adminRoleParam") AdminRoleParam adminRoleParam);

    /**
     * 功能描述：根据ID查询管理员角色
     * @param id
     * @return
     */
    IamAdminRoleInfo queryById(@Param("id") Long id);

    /**
     * 功能描述：更新管理员角色
     * @param adminRoleInfo
     */
    void updateById(@Param("adminRoleInfo") IamAdminRoleInfo adminRoleInfo);

    /**
     * 功能描述：获取当前最大编码
     * @return
     */
    Integer getMaxRoleCode();

    /**
     * 功能描述：新增管理员角色
     * @param adminRoleInfo
     */
    void insert(IamAdminRoleInfo adminRoleInfo);

    /**
     * 功能描述：批量更新角色状态
     * @param adminRoleStatusVo
     * @param userName
     */
    void updateForStatus(@Param("adminRoleStatusVo") AdminRoleStatusVo adminRoleStatusVo, @Param("userName") String userName);

    /**
     * 功能描述：批量删除角色
     * @param ids
     * @param userName
     */
    void batchDelete(@Param("ids") List<Long> ids, @Param("userName") String userName);

    /**
     * 功能描述：统计绑定用户
     * @param roleId
     * @param userCode
     * @return
     */
    int countByUserCode(@Param("roleId") Long roleId, @Param("userCode") String userCode);

    /**
     * 功能描述：批量绑定用户
     * @param roleId
     * @param userCodes
     * @param userName
     */
    void bindUser(@Param("roleId") Long roleId, @Param("userAccountList") List<UserAccountVo> userCodes, @Param("userName") String userName);

    /**
     * 功能描述：批量解绑用户
     * @param roleId
     * @param userCodes
     * @param userName
     */
    void unBindUser(@Param("roleId") Long roleId, @Param("userCodes") List<UserAccountVo> userCodes, @Param("userName") String userName);

    /**
     * 功能描述：根据
     * @param roleId
     * @return
     */
    List<Long> queryByRoleId(@Param("roleId") Long roleId);

    /**
     * 功能描述：批量删除菜单
     * @param ids
     * @param userName
     */
    void deleteMenuByRoleId(@Param("roleIds") List<Long> ids, @Param("userName") String userName);

    /**
     * 功能描述：批量删除按钮
     * @param ids
     * @param userName
     */
    void deleteButtonByRoleId(@Param("roleIds") List<Long> ids, @Param("userName") String userName);

    /**
     * 功能描述：批量删除应用
     * @param ids
     * @param userName
     */
    void deleteApplyByRoleId(@Param("roleIds") List<Long> ids, @Param("userName") String userName);

    /**
     * 功能描述：批量删除组织
     * @param ids
     * @param userName
     */
    void deleteOrgByRoleId(@Param("roleIds") List<Long> ids, @Param("userName") String userName);
}
